package DLL;

public class UT_DLL {

    public native boolean GetSn(long pSn[],long pulCount[]);
    public native boolean GetMacAddr(byte mac[]);
    public native boolean GetHDSerial(String HardDriveModelNumber);
    public native boolean GetVolumNumber(String lpRootPathName,long lpVolumeSerialNumber[]);

///////////////////////////////////////////////////////////////////////////////

    public native boolean SetLedTime(long Led_on ,
                                     long Led_Time,
                                     boolean flag,
                                     String password,
                                     long uSerial,
                                     long uMini);
    public native boolean SetLedTime(long Led_on ,
                                     long Led_Time,
                                     boolean flag,
                                     byte[] password,
                                     long uSerial,
                                     long uMini);
    /************************************************************************/
    /* Led_On,设置一个Led的亮灭周期中，Led灯点亮的时间，单位为50ms				*/
    /* Led_Time, 设置一个Led灯的亮灭周期，单位为50ms							*/
    /* 说明：Led_On不能大于Led_Time,否则会返回参数错误							*/
    /* Led_On可以等于Led_Time,此时，灯常亮										*/
    /* flag为0时，忽略密码，此时password参数忽略，							*/
    /*            函数调用成功会临时改变Led的亮灭周期							*/
    /* flag为1时，会验证密码，													*/
    /*            若密码错误，会设置失败										*/
    /*			  若密码验证完成，会永久改变Led灯的亮灭周期						 */
    /* 返回值为真时成功，否则失败，LYFGetLastError()返回错误号     */
    /************************************************************************/


    public native boolean InitiateLock(long uSerial);

    /*
     * ** 功能说明：** 此函数是时钟锁的初始化函数，调用任何其他函数前请务必先调用此函数进行初始化工作。**** 参数说明：** uSerial
     * ：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。**** 返回值：**
     * 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean TerminateLock(long uSerial);

    /*
     * ** 功能说明：** 此函数对是时钟锁不再使用时调用的终止函数，对结束加密锁使用进行必要的操作。**
     * 这个函数调用后，任何其他的函数将不能正常使用，除非再次调用InitiateLock()函数。**** 参数说明：** uSerial
     * ：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。**** 返回值：**
     * 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean Lock32_Function(int uRandomNum, int[] puRet,long uSerial);

    /*
     * ** 功能说明：此函数根据输入的参数，通过时钟锁的运算，返回一个无符号的32位整数。**
     * 与ShieldPC()的返回值相比较，如果两个返回值相等则说明时钟锁能够正常工作。**** 参数说明：** uRandomNum ：
     * 随机数,32位无符号整数。** uSerial ： 时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。**
     * ** 返回值：** 该函数返回一个32位无符号整形值。
     */

    public native boolean ReadTime(long[] ptTime,String pwd,long uSerial,long uMini);
    public native boolean ReadTime(long[] ptTime, byte[] pwd,long uSerial,long uMini);
    /*
     *** 功能说明：此函数取得时钟锁的当前时间。
     ***
     *** 参数说明：
     *** ptTime	：该参数以time_t的形式表示；其值是从UTC时间1970年1月1日00:00:00到当前时刻的秒数。
     *** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
     *** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
     *** uMini	：动态密码的Mini值，如果pszPsd是管理密码，该值可为任意值。
     ***
     *** 返回值：
     *** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean ResetTime(String pszPsd,long uSerial,long uMini);
    public native boolean ResetTime(byte[] pszPsd,long uSerial,long uMini);
    /*
     *** 功能说明：此函数如果成功完成，将把时钟锁的当前时间设置为本机当前时间。只有动态密码才有权限重新设置时间。重设时间功能每天只能使用一次。
     ***
     *** 参数说明：
     *** pszPsd	：动态密码，uMini是与之对应的一个值。
     *** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
     *** uMini	：动态密码的Mini值。
     ***
     *** 返回值：
     *** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean WriteLock(long uAddr,String Buffer, String pszPsd, long uSerial, long uMini);
    public native boolean WriteLock(long uAddr,byte[] Buffer, byte[] pszPsd, long uSerial, long uMini);
    /*
     *** 功能说明：向时钟锁的存储器中写入数据，该函数只写入从缓冲区指针指向地址开始的4字节数据。
     ***
     *** 参数说明：
     *** uAddr	：要写入的起始地址，必须为从1开始到1792
     *** Buffer	：要写入的缓冲区指针。
     *** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
     *** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
     *** uMini	：动态密码的Mini值，如果pszPsd是管理密码，该值可为任意值。
     ***
     *** 返回值：
     *** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean WriteLockEx(long uAddr, String Buffer, long iBufLen, String pszPsd, long uSerial, long uMini);
    public native boolean WriteLockEx(long uAddr, byte[] Buffer, long iBufLen, byte[] pszPsd, long uSerial, long uMini);
    /*
     *** 功能说明：向时钟锁的存储器中写入数据，该函数只写入从缓冲区指针指向地址开始的4字节数据。
     ***
     *** 参数说明：
     *** uAddr	：要写入的起始地址，必须为从1开始到1792
     *** Buffer	：要写入的缓冲区指针。
     *** iBufLen	：写入缓冲去的长度。
     *** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
     *** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
     *** uMini	：动态密码的Mini值，如果pszPsd是管理密码，该值可为任意值。
     ***
     *** 返回值：
     *** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean ReadLock(long uAddr, byte[] pBuffer, String pszPsd, long uSerial, long uMini);
    public native boolean ReadLock(long uAddr, byte[] pBuffer, byte[] pszPsd, long uSerial, long uMini);
    /*
     *** 功能说明：从时钟锁的存储器中读出数据，该函数读取从指定地址开始的4字节数据。
     ***
     *** 参数说明：
     *** uAddr	：要读取的起始地址，必须为从1开始到1792
     *** Buffer	：要读取的缓冲区指针。
     *** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
     *** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
     *** uMini	：动态密码的Mini值，如果pszPsd是管理密码，该值可为任意值。
     ***
     *** 返回值：
     *** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean ReadLockEx(long uAddr, byte[] pBuffer, long iReadLen, String pszPsd, long uSerial, long uMini);
    public native boolean ReadLockEx(long uAddr, byte[] pBuffer, long iReadLen, byte[] pszPsd, long uSerial, long uMini);
    /*
     *** 功能说明：从时钟锁的存储器中读出数据，该函数读取从指定地址开始的4字节数据。
     ***
     *** 参数说明：
     *** uAddr	：要读取的起始地址，必须为从1开始到1792
     *** Buffer	：要读取的缓冲区指针。
     *** iReadLen：读取的数据长度
     *** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
     *** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
     *** uMini	：动态密码的Mini值，如果pszPsd是管理密码，该值可为任意值。
     ***
     *** 返回值：
     *** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    public native boolean Counter(String pszPsd, long uSerial, long uMini, long uSign, long[] uCount);
    public native boolean Counter(byte[] pszPsd, long uSerial, long uMini, long uSign, long[] uCount);
    /*
     *** 功能说明：获取时钟锁还要多少次到期。
     ***
     *** 参数说明：
     *** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
     *** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
     *** uMini	：动态密码的Mini值，如果pszPsd是管理密码，该值可为任意值。
     *** uSign	：到期时是否弹出窗口提示，1为弹出，0为不弹。
     ***	uCount	：出参，用来获取时钟锁还有多少次到期。
     ***
     *** 返回值：
     *** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
     */

    //////////////////////////////////////////////////////////////////////////////
    public native boolean SetLock(long uFunction,long[] puParam,long uParam,String pszParam,String pszPsd,long uSerial,long uMini);
    public native boolean SetLock(long uFunction,long[] puParam,long uParam, byte[] pszParam, byte[] pszPsd,long uSerial,long uMini);
	/*
	*** 功能说明：该函数的功能是设置时钟锁。
	***
	*** 参数说明：
	*** uFun	：功能号
	*** puParam	：与功能号对应的参数
	*** uParam	：与功能号对应的32位整数
	*** pszParam：与功能号对应的参数
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值，如果pszPsd是管理密码，该值可为任意值。
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 0 时：函数返回时钟锁剩余的使用次数/时间
	*** uFun	：= 0
	*** puParam	：返回剩余次数/分钟
	*** uParam	：忽略
	*** pszParam：忽略
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 1 时：设置时钟锁期限，类型为计次
	*** uFun	：= 1
	*** puParam	：要设置期限的次数
	*** uParam	：忽略
	*** pszParam：期限密码
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 2 时：设置时钟锁期限，类型为计时类型，时钟锁可以有效使用时间为特定的分钟数
	*** uFun	：= 2
	*** puParam	：要设置期限的分钟数
	*** uParam	：忽略
	*** pszParam：期限密码
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 3 时：设置时钟锁期限，类型为计时类型，时钟锁可以有效使用至固定的某个时间
	*** uFun	：= 3
	*** puParam	：要设置期限的起始时间
	*** uParam	：要设置期限的结束时间
	*** pszParam：期限密码
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 4 时：永久解除时间限制，或重新重置时钟锁期限
	*** uFun	：= 4
	*** puParam	：忽略
	*** uParam	：忽略
	*** pszParam：期限密码。注，当期限密码正确传入时，将永久解除时间限制。如要重置时间限制，请忽略此参数。
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 5 时：设置限制类型
	*** uFun	：= 5
	*** puParam	：指向的值为LIMIT_TYPE_COUNT表示计次。LIMIT_TYPE_LENGTH表示计时。LIMIT_TYPE_QUANTUM标示特定时间段。
	*** uParam	：忽略
	*** pszParam：忽略
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 6 时：获取限制类型
	*** uFun	：= 6
	*** puParam	：返回时钟锁当前期限类型 与设置时的该值对应，如果不在这3个当中，标示时钟锁还未设置期限。
	*** uParam	：忽略
	*** pszParam：忽略
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 7 时：设置管理密码
	*** uFun	：= 7
	*** puParam	：忽略
	*** uParam	：忽略
	*** pszParam：指向要设置的密码字符串的指针，密码长度最长为8个英文字母、数字、特殊符号、等字符。
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	***----------------------------------------------------------------------------
	*** 功能号:uFunction = 8 时：获取时钟锁的序列号
	*** uFun	：= 8
	*** puParam	：返回时钟锁的序列号
	*** uParam	：忽略
	*** pszParam：忽略
	*** pszPsd	：管理密码或动态密码，当其值为动态密码时，uMini是与之对应的一个值。
	*** uSerial	：时钟锁的序列号，标示一个特定的时钟锁；如果为0，则表示连接到本机的第一个类似时钟锁的设备。
	*** uMini	：动态密码的Mini值；如果pszPsd是管理密码，该值忽略。
	***----------------------------------------------------------------------------
	
	*** 返回值：
	*** 该函数的返回值如果为非0则函数成功执行，如果为0，则参考错误号列表。LYFGetLastError()返回错误号。
	
	注意：调用此函数使用其不同功能时，忽略的参数不能传入0，NULL等值,其他任意值都可以。
	*/

    ///////////////////////////////////////////////////////////////////////////////
    public native long LYFGetLastErr();
    /*
     *** 功能说明：该函数的功能是返回当前线程最后一次错误的错误号，与windows的GetLastError()函数返回的值兼容
     ***			  函数返回的错误号可在错误列表中查找，如果不在错误表中，则在windows API的错误列表中查找。
     ***
     *** 返回值：
     *** 该函数的返回值是函数的错误号。
     */

    static{
        System.loadLibrary("UT8K_JavaDll");
    }
}
